Whenever a network has multiple routes available for transmitting messages, a specific route must be selected for a particular message transmission. A number of problems exist with respect to selection of the best route for transmitting a message. While it is common to address route selection by computing quality of service metrics, it is challenging to do so without adding transmissions that are used solely for testing route quality.
Most existing routing algorithms focus on minimizing the number of hops between the two end-points rather than measuring latency or reliability. In systems that have attempted to compare route latency, transmission of additional messages has typically been required, but this technique increases route congestion as well as route processing overhead.
Selection of the route with the lowest hop count is a commonly implemented method. However, in many networks, such as Ethernet and Fibre Channel, the hop count of a route is not as important as the latency or frame loss rate of a route. Selection of the fastest and most reliable route, rather than the route merely having the lowest hop count, is thus desirable.
Communication within a prior art network 100, such as a storage area network (SAN), is illustrated in FIG. 1, which shows applications 101(*), running on end-points 102(*), communicating with their peer applications 101(*) via respective ports 103(*) and fabrics 105(*). As used herein, a ‘wild card’ indicator “(*)” following a reference number indicates an arbitrary one of a plurality of similar entities. The communication infrastructure in a storage area network often includes two or more independent Fibre Channel fabrics 105(1) and 105(k) comprising multiple switches and hubs (not shown). Each end-point 102(*) is connected to each Fibre Channel fabric 105(*) via one or more nodes 104(*), and may use any available fabric to communicate with other end-points 102(*). Each node 104(*) provides at least one port 103(*) between an end-point 102(*) and a Fibre Channel fabric 105(*).
A node 104(*) is a module such as a Fibre Channel adapter module, or a collection of circuits embedded within the end-point. As shown in FIG. 1, a node 104(*) may use multiple ports 103(*) to connect to a fabric 105(*); for example, node 104(1) includes ports 103(1) and 103(3), both of which are connected to fabric 105(1).